package pro.cherish.knowledgeschedule.distributed;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import pro.cherish.knowledgeutil.date.DateUtilExt;

import java.util.concurrent.TimeUnit;

/**
 * @author 创建人：cherish
 * @version 版本号：V1.0
 * <p>
 * ***************************修订记录************************************
 * 2019-11-05 cherish 创建该类功能。
 * **********************************************************************
 * </p>
 * @ClassName 类名：AutoInsertVuserToGroupBuying
 * @Description 功能说明：使用redis做分布式锁
 * <p>
 * TODO
 * </p>
 * **********************************************************************
 * @date 创建日期： 2019-11-05 cherish
 */
@Component
@Slf4j
public class AutoInsertVuserToGroupBuying {

    @Autowired
    private RedisTemplate redisTemplate;


    @Scheduled(cron = "0 */10 * * * ?")  //定时器10分钟一次
    public void shTask() {
        String key = "lockKey";
        String value = "lockValue";
        //先判断redis中是否有锁记录,如果能设值成功,代表拿到锁，不能设值成功就是锁还没释放
        if (redisTemplate.opsForValue().setIfAbsent(key, value)) {
            //设值成功后,设置锁超时时间 (我这里是9分钟)
            redisTemplate.expire(key, 9, TimeUnit.MINUTES);
            //业务
            dojob();
        }
    }

    private void dojob() {
        log.info("======================================");
        log.info("【doJob】执行了吗，时间为{}", DateUtilExt.getNowDateTime());
        log.info("======================================");
    }

}
